<?php
abstract class Arm_Db_Sql_Abstract
{
  /**
     * Zend_Db_Adapter_Abstract
     * 
     * @var Zend_Db_Adapter_Abstract
     */
    protected $_db;
    

    
    public function __construct(Zend_Db_Adapter_Abstract $db)
    {
       $this->_db = $db;
       $this->init();
    }
    
    /**
     * Метод могут изменять дочерние классы для иницилизации
     * необходим действий во время создания обьекта класса Sql
     */
    public function init()
    {
    
    }
    
    /**
     * Проверит есть ли таблица в базе данных.
     * @param string $table
     * @return bool
     */
    protected  function _isTable($table)
    {
       $tables = $this->_db->listTables();
       if(array_search($table, $tables) === false) {
           return false;
       }
       return true;
    }
    
    
    /**
     * Zend_Db_Select
     * @return Zend_Db_Select
     */
    protected function _getSelect()
    {
    return $this->_db->select();
    }
    
    /**
     * Zend_Db_Adapter_Abstract
     * 
     * @return Zend_Db_Adapter_Abstract
     */
    public function getDb()
    {
      return $this->_db;
    }
    
    /**
     * Вернет названия столбцов с таблицы $table
     * @param string $table
     * @return array
     */
    protected function _getColumnTable($table)
    {
      $result = $this->_db->describeTable($table);
      return array_keys($result);
        
    }
    
    
    /**
     * На основе данных масива $data будет созданный новый масив,
     * включим только данные ключи которых соотвествуют колонкам таблице.
     * @param string $table
     * @param array  $data
     * @return array
     */
    protected function _getArrayColumTable($table, $data)
    {
      $columsTable = $this->_getColumnTable($table);
      $dataUpdate = array();
      foreach ($columsTable as $k=>$v) {
          if(false === array_key_exists($v, $data)) {
              continue;
          }
          $dataUpdate[$v] = $data[$v];
      }
      return $dataUpdate;
    }
    
    
    /**
     * Вернет последний id с таблици $table
     * @param string $table навазния таблицы
     * @param string $nameColId навазния столбца
     */
    protected function _getLastId($table, $nameColId)
    {
         $select = $this->_db->select();
         $select->from($table, $nameColId);
         $select->order( $nameColId . ' DESC');
         return  (int) $this->_db->fetchOne($select);
    }
}